<?php

namespace common\helpers;

use Yii;
use yii\helpers\Html;

/**
 * Class ImageHelper
 * @package common\helpers
 *
 */
class ImageHelper
{
    /**
     * 默认头像
     *
     * @param $imgSrc
     * @param string $defaultImgSre
     * @return string
     */
    public static function defaultHeaderPortrait($imgSrc, $defaultImgSre = '/resources/dist/img/profile_small.jpg')
    {
        return !empty($imgSrc) ? $imgSrc : Yii::getAlias('@web') . $defaultImgSre;
    }

    /**
     * 点击大图
     *
     * @param $imgSrc
     * @param int $width
     * @param int $height
     * @return string
     */
    public static function fancyBox($imgSrc, $width = 45, $height = 45)
    {
        $image = Html::img($imgSrc, [
            'width' => $width,
            'height' => $height,
        ]);

        return Html::a($image, $imgSrc, [
            'data-fancybox' => 'gallery'
        ]);
    }

    /**
     * 判断是否图片地址
     *
     * @param string $imgSrc
     * @return bool
     */
    public static function isImg($imgSrc)
    {
        $extend = StringHelper::clipping($imgSrc, '.', 1);

        $imgExtends = [
            'bmp',
            'jpg',
            'gif',
            'jpeg',
            'jpe',
            'jpg',
            'png',
            'jif',
            'dib',
            'rle',
            'emf',
            'pcx',
            'dcx',
            'pic',
            'tga',
            'tif',
            'tiffxif',
            'wmf',
            'jfif'
        ];
        if (in_array($extend, $imgExtends) || strpos($imgSrc, 'http://wx.qlogo.cn') !== false) {
            return true;
        }

        return false;
    }

    /**
     * 获取水印坐标
     *
     * @param $imgUrl
     * @param $watermarkImgUrl
     * @param $point
     * @return array|bool
     */
    public static function getWatermarkLocation($imgUrl, $watermarkImgUrl, $point)
    {
        if (empty($imgUrl) || empty($watermarkImgUrl)) {
            return false;
        }

        if (!file_exists($watermarkImgUrl) || !file_exists($imgUrl)) {
            return false;
        }

        $imgSize = getimagesize($imgUrl);
        $watermarkImgSize = getimagesize($watermarkImgUrl);
        if (empty($imgSize) || empty($watermarkImgSize)) {
            return false;
        }

        $imgWidth = $imgSize[0];
        $imgHeight = $imgSize[1];
        $imgMime = $imgSize['mime'];
        $watermarkImgWidth = $watermarkImgSize[0];
        $watermarkImgHeight = $watermarkImgSize[1];
        $watermarkImgMime = $watermarkImgSize['mime'];

        switch ($point) {
            case 1 : // 左上角
                $porintLeft = 20;
                $pointTop = 20;

                break;
            case 2 : // 上中部
                $porintLeft = floor(($imgWidth - $watermarkImgWidth) / 2);
                $pointTop = 20;

                break;
            case 3 : // 右上部
                $porintLeft = $imgWidth - $watermarkImgWidth - 20;
                $pointTop = 20;

                break;
            case 4 : // 左中部
                $porintLeft = 20;
                $pointTop = floor(($imgHeight - $watermarkImgHeight) / 2);

                break;
            case 5 : // 正中部
                $porintLeft = floor(($imgWidth - $watermarkImgWidth) / 2);
                $pointTop = floor(($imgHeight - $watermarkImgHeight) / 2);

                break;
            case 6 : // 右中部
                $porintLeft = $imgWidth - $watermarkImgWidth - 20;
                $pointTop = floor(($imgHeight - $watermarkImgHeight) / 2);

                break;
            case 7 : // 左下部
                $porintLeft = 20;
                $pointTop = $imgHeight - $watermarkImgHeight - 20;

                break;
            case 8 : // 中下部
                $porintLeft = floor(($imgWidth - $watermarkImgWidth) / 2);
                $pointTop = $imgHeight - $watermarkImgHeight - 20;

                break;
            case 9 : // 右下部
                $porintLeft = $imgWidth - $watermarkImgWidth - 20;
                $pointTop = $imgHeight - $watermarkImgHeight - 20;

                break;
            default :
                return [0, 0];

                break;
        }

        // 太小就不生成水印坐标
        if (($imgWidth - $porintLeft) < $watermarkImgWidth || ($imgHeight - $pointTop) < $watermarkImgHeight) {
            return false;
        }

        return [$porintLeft, $pointTop];
    }

    /**
     * 返回图片地址
     *
     * @param string $path
     * @return string
     */
    public static function getImagePathUrl(string $path = '')
    {
        return Yii::$app->params['api_url']. Yii::getAlias('@attachUrl') . '/' . $path;
    }

    /**
     * 获取Oss图片url
     *
     * @param string $path Oss上传路径【demo: dir/dir1/1.jpg，不包含项目短名称】
     * @param int $projectId 项目ID
     * @return string
     */
    public static function getOssImageUrl(string $path = '', int $projectId = 0)
    {
        if ($projectId) {
            // 获取项目信息
            $project = RedisHelper::getProjectById($projectId);
            if ($project) {
                $path = "{$project['name_sx']}/{$path}";
            }
        }

        return Yii::$app->params['file_url']."/{$path}";
    }

    /**
     * 生成文件名
     *
     * @param string $fileType 文件类型
     * @return string
     */
    public static function createFileName(string $fileType = '')
    {
        // 生成文件名
        $fileName = date('YmdHis').CommonHelper::getRandomAuthKey(6);

        if ($fileType) {
            $fileName .= ".{$fileType}";
        }

        return $fileName;
    }

    /**
     * 生成图片url
     *
     * @param string $file 文件
     * @return string
     */
    public static function getImageUrl(string $file = '')
    {
        return Yii::$app->params['api_url']."/{$file}";
    }
}
